/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op;

import java.util.Date;

/**
 *
 * @author Jônatas
 */
public class QuebraStringEmbratel {

    public static EntradaAbstrata quebraStringEmbratel(String entrada, boolean aCobrar, String tipo) throws Exception {

        String numeroMisterioso;
        Telefone numeroDeOrigem;
        Date dataOrigemLigacao;     // Data e hora vao ser armazenados aqui dentro!!
        String localDaLigacao;
        String tipoDeLigacao;
        String imposto;
        Telefone destino = null;
        Integer duracaoLigacaoSegundos = null;
        Integer duracaoLigacaoACobrarSegundos = null;
        Double custo;


        String[] valores = entrada.replace("\t\t", "\t").split("\t");

        if (valores.length != 10) {
            throw new IllegalArgumentException("Entrada invalida. A entrada deve"
                    + "conter 10 argumentos separados por 'tabulação'.");
        }

        numeroMisterioso = valores[0];
        numeroDeOrigem = ((valores[1].length() > 0) ? new Telefone("0" + valores[1].trim()) : null);

        String data = valores[4].trim();
        String hora = valores[5].trim();

        if ((data.length() > 0) && (hora.length() > 0)) {
            dataOrigemLigacao = EntradaAbstrata.criaDate(data, hora);
        } else {
            dataOrigemLigacao = null;
        }

        localDaLigacao = valores[2].trim();
        tipoDeLigacao = valores[7].trim();
        imposto = valores[9].trim();

        try {
            String foneTemp = valores[3].trim();
            if (foneTemp.length() == 0) {
                destino = null;
            } else if (foneTemp.length() == 10) {
                destino = new Telefone("0" + foneTemp);
            } else {
                destino = new Telefone(foneTemp, true);
            }
        } catch (Exception e) {
            System.out.println(valores[3]);
            e.printStackTrace();
            throw e;
        }
        if (!aCobrar) {
            duracaoLigacaoSegundos = (valores[6].trim().length() > 0 ? getDuracaoLigacaoSegundos(valores[6].trim()) : null);
        } else {
            duracaoLigacaoACobrarSegundos = (valores[6].trim().length() > 0 ? getDuracaoLigacaoSegundos(valores[6].trim()) : null);
        }

        custo = (valores[8].trim().length() > 0 ? new Double(valores[8].trim().replace(",", ".")) : null);


        EntradaAbstrata ligacao = new Ligacao();

        ligacao.setCusto(custo);
        ligacao.setDataOrigemLigacao(dataOrigemLigacao);
        ligacao.setDestino(destino);
        ligacao.setDuracaoLigacaoACobrarSegundos(duracaoLigacaoACobrarSegundos);
        ligacao.setDuracaoLigacaoSegundos(duracaoLigacaoSegundos);
        ligacao.setImposto(imposto);
        ligacao.setLocalDaLigacao(localDaLigacao);
        ligacao.setNumeroDeOrigem(numeroDeOrigem);
        ligacao.setNumeroMisterioso(numeroMisterioso);
        ligacao.setTipoDeLigacao(tipoDeLigacao + (custo == 0 ? " Franqueada" : ""));
        ligacao.setPlanoLigacao(tipo + (custo == 0 ? " Franqueada" : ""));

        return ligacao;



    }

    public static Integer getDuracaoLigacaoSegundos(String hora) {

        int hh = Integer.parseInt(hora.substring(0, 3));
        int mm = Integer.parseInt(hora.substring(4, 6));
        int ss = Integer.parseInt(hora.substring(7));

        int segundos = (hh * 60 * 60) + (mm * 60) + ss;

        return new Integer(segundos);

    }
}
